package com.hieu.dialog;

import java.util.Calendar;

import com.hieu.sql.DAL;
import com.hieu.tripmanager.R;
import com.hieu.util.Util;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.content.Context;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

public class AddTripDialog extends Activity {
	private EditText edtStartDate;
	private EditText edtEndDate;
	private EditText edtName;
	private EditText edtNotes;
	private Spinner mSprTripType;
	private String[] mTripTypeName = null;
	private Button btnSave;
	private Button btnCancel;
	private int mDay, mMonth, mYear;
	private DatePickerDialog.OnDateSetListener mDateSetListener,
			mDateSetListener1;
	private String currentDate;
	private DAL mDAL;
	private Util util = new Util();
	public OnDismissChange onDismissChange;

	public interface OnDismissChange {
		public void onChange();
	}

	public Dialog createDialog(final Context context, OnDismissChange onDismiss) {
		final Dialog dialog = new Dialog(context);
		dialog.setContentView(R.layout.dialog_add_trip);
		dialog.setTitle("Thêm mới");
		this.onDismissChange = onDismiss;

		edtName = (EditText) dialog.findViewById(R.id.edtNametrip);
		edtStartDate = (EditText) dialog.findViewById(R.id.edtStartDate);
		edtEndDate = (EditText) dialog.findViewById(R.id.edtEndDate);
		mSprTripType = (Spinner) dialog.findViewById(R.id.spr_trip_type);
		edtNotes = (EditText) dialog.findViewById(R.id.edtNotes);
		btnSave = (Button) dialog.findViewById(R.id.btnSave);
		btnCancel = (Button) dialog.findViewById(R.id.btnCancel);

		edtStartDate.setFocusable(false);
		edtEndDate.setFocusable(false);

		mTripTypeName = context.getResources().getStringArray(
				R.array.trip_type_name);
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(context,
				android.R.layout.simple_spinner_dropdown_item, mTripTypeName);

		mSprTripType.setAdapter(adapter);

		edtStartDate.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Dialog d = onCreateDialog(0, v.getContext());
				d.show();
			}
		});

		edtEndDate.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Dialog d = onCreateDialog(1, v.getContext());
				d.show();
			}
		});

		btnSave.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View view) {
				// TODO Auto-generated method stub
				mDAL = new DAL(context);

				String name = String.valueOf(edtName.getText());
				String startDate = String.valueOf(edtStartDate.getText());
				String endDate = String.valueOf(edtEndDate.getText());
				String type = mSprTripType.getSelectedItem().toString();
				String notes = String.valueOf(edtNotes.getText());

				if (!util.checkIsEmpty(name) && !util.checkIsEmpty(notes)) {

					if (util.checkEndDate(currentDate, startDate)) {

						if (util.checkEndDate(startDate, endDate)) {

							if (!util.checkValiate(name)
									&& !util.checkValiate(notes)) {

								if (mDAL != null) {
									mDAL.insertTrip(name.trim(), startDate, endDate, type,
											notes.trim());
									onDismissChange.onChange();
									Toast.makeText(view.getContext(),
											"Thêm chuyến đi mới thành công",
											Toast.LENGTH_LONG).show();
									dialog.dismiss();
								}
							} else {
								Toast.makeText(
										view.getContext(),
										"Thông tin nhập vào chứa kí tự đặc biệt",
										Toast.LENGTH_LONG).show();
							}

						} else {
							Toast.makeText(
									view.getContext(),
									"Thời gian kết thúc chuyến nhỏ hơn thời gian bắt đầu",
									Toast.LENGTH_LONG).show();
						}

					} else {
						Toast.makeText(
								view.getContext(),
								"Thời gian bắt đầu chuyến nhỏ hơn thời gian hiện tại",
								Toast.LENGTH_LONG).show();
					}
				} else {
					Toast.makeText(context, "Nhập thiếu trường dữ liệu",
							Toast.LENGTH_LONG).show();

				}
				

			}
		});
		btnCancel.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View view) {
				// TODO Auto-generated method stub
				dialog.dismiss();
			}
		});
		showStartDatePicker();
		showEndDatePicker();
		return dialog;

	}

	private void showStartDatePicker() {
		final Calendar c = Calendar.getInstance();
		mYear = c.get(Calendar.YEAR);
		mMonth = c.get(Calendar.MONTH);
		mDay = c.get(Calendar.DAY_OF_MONTH);
		// Lấy ngày hiện tại của hệ thống để so sánh với ngày bắt đầu new trip
		currentDate = String.valueOf(new StringBuilder().append(util.pad(mDay))
				.append("/").append(util.pad(mMonth + 1)).append("/")
				.append(util.pad(mYear)));
		updateDisplay(0);
		mDateSetListener = new OnDateSetListener() {

			@Override
			public void onDateSet(DatePicker view, int year, int monthOfYear,
					int dayOfMonth) {
				// TODO Auto-generated method stub

				mYear = year;
				mMonth = monthOfYear;
				mDay = dayOfMonth;
				Log.v("dataset start", "" + mDay + "--" + mMonth + "--" + mYear);
				// Gọi hàm thời gian in ra Text view
				updateDisplay(0);
			}
		};

	}

	private void showEndDatePicker() {
		final Calendar c = Calendar.getInstance();
		mYear = c.get(Calendar.YEAR);
		mMonth = c.get(Calendar.MONTH);
		mDay = c.get(Calendar.DAY_OF_MONTH);
		// Lấy ngày hiện tại của hệ thống để so sánh với ngày bắt đầu new trip
		currentDate = String.valueOf(new StringBuilder().append(util.pad(mDay))
				.append("/").append(util.pad(mMonth + 1)).append("/")
				.append(util.pad(mYear)));
		updateDisplay(1);
		mDateSetListener1 = new OnDateSetListener() {

			@Override
			public void onDateSet(DatePicker view, int year, int monthOfYear,
					int dayOfMonth) {
				// TODO Auto-generated method stub

				mYear = year;
				mMonth = monthOfYear;
				mDay = dayOfMonth;
				// Gọi hàm thời gian in ra Text view
				updateDisplay(1);
			}
		};

	}

	private void updateDisplay(int d) {
		if (d == 0) {

			edtStartDate.setText(new StringBuilder().append(util.pad(mDay))
					.append("/").append(util.pad(mMonth + 1)).append("/")
					.append(util.pad(mYear)));
			Log.v("update start", "" + mDay + "---" + (mMonth + 1));
		}
		if (d == 1) {

			edtEndDate.setText(new StringBuilder().append(util.pad(mDay))
					.append("/").append(util.pad(mMonth + 1)).append("/")
					.append(util.pad(mYear)));
			Log.v("update end", "" + mDay + "---" + (mMonth + 1));
		}
	}

	protected Dialog onCreateDialog(int id, Context context) {
		switch (id) {
		case 0:
			return new DatePickerDialog(context, mDateSetListener, mYear,
					mMonth, mDay);
		case 1:
			return new DatePickerDialog(context, mDateSetListener1, mYear,
					mMonth, mDay);
		}
		return null;
	}

}